package JASYPT;

/**
 * Encriptar.java
 *
 * Utilidad para codificar y decodificar textos mediante una palabra clave
 *
 * @author jdelgado
 * @version 0.0.0.1 - 6 de Marzo 2007
 *
 * usa Java Simplified Encryption (http://www.jasypt.org/getting-started-easy.html)
 *
 */
import org.jasypt.util.text.BasicTextEncryptor;

public class Encriptar {
	/**
	 * Codifica un texto mediante una palabra clave
	 * 
	 * @param mensaje
	 *            el texto a codificar
	 * @param password
	 *            la palabra clave
	 * @return el texto codificado
	 * @throws Exception
	 *             excepcion levantada en caso de error
	 */
	static public String codifica(String mensaje, String password)
			throws Exception {
		try {
			BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
			textEncryptor.setPassword(password);
			String encryptedText = textEncryptor.encrypt(mensaje);
			// String plainText = textEncryptor.decrypt(myEncryptedText);
			return encryptedText;
		} catch (Exception e) {
			throw e;
		}
	}

	/**
	 * Decodifica un texto mediante una palabra clave
	 * 
	 * @param mensaje
	 *            el texto a decodificar
	 * @param password
	 *            la palabra clave
	 * @return el texto decodificado
	 * @throws Exception
	 *             excepcion levantada en caso de error
	 */
	static public String decodifica(String mensaje, String password)
			throws Exception {
		try {
			BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
			textEncryptor.setPassword(password);
			String Text = textEncryptor.decrypt(mensaje);
			return Text;
		} catch (Exception e) {
			throw e;
		}
	}

	/**
	 * Para probar el correcto funcionamiento de la clase de ejemplo.
	 * 
	 * @param args
	 *            argumentos de entrada.
	 */
	public static void main(String[] args) {
		try {
			String mensaje = "Un Ubuntu para atraerlos a todos y atarlos en las tinieblas.";
			String codigo_secreto = "best";
			System.out.println("Texto original: " + mensaje);
			String cod = Encriptar.codifica(mensaje, codigo_secreto);
			System.out.println("Texto encriptado: " + cod);
			String texto_bien = Encriptar.decodifica(cod, codigo_secreto);
			System.out.println("Texto desencriptado : " + texto_bien);
			String texto_mal = Encriptar.decodifica(cod, "badpassword");
			System.out.println("Texto desencriptado (bad password): " + texto_mal);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}